<?php
/**
 * RBAC基于角色的访问控制接口
 * 
 * 定义权限管理的相关操作,如授权等.
 * 
 * @author Leo Ning <leo.ning@like18.com>
 * @copyright LIKE18 INC. 2008 - 2011
 * @version 1.0
 * @since 1.0
 * @package rbac
 */
interface IRbac {
	/**
	 * 为访问者分配权限
	 * 
	 * @param array $ops 权限
	 * @param string $resource 资源
	 * @param mixed $id 访问者标识,建议使用int或string型,长度不应长于32
	 * @param mixed $type 访问者类型,可自定义
	 * @param int $priority 优先级
	 * @param array $extra 额外信息	 
	 * @return boolean 
	 */
	function grant($ops, $resource, $id, $type, $priority = -1, $extra = array());
	/**
	 * 
	 * 得到权限分配记录的额外信息
	 * 
	 * @param string $op
	 * @param string $resource
	 * @param mixed $id
	 * @param string $type
	 */
	function getExtra($op, $resource, $id, $type);
	/**
	 * 
	 * 为权限分配额外信息
	 * 
	 * @param string $op 操作
	 * @param string $resource 资源
	 * @param mixed $id
	 * @param string $type
	 * @param array $extra 额外信息
	 * @return boolean
	 */
	function setExtra($op, $resource, $id, $type, $extra);
	/**
	 * 收回访问者权限
	 * 
	 * @param array $ops 要收回的权限
	 * @param string $resource
	 * @param mixed $id 访问者标识,建议使用int或string型,长度不应长于32
	 * @param mixed $type 访问者类型,可自定义
	 * @return boolean 
	 */
	function revoke($ops, $resource, $id, $type);
	/**
	 * 
	 * 收回访问者所有权限
	 * 
	 * @param mixed $id 访问者标识,建议使用int或string型,长度不应长于32
	 * @param mixed $type 访问者类型,可自定义
	 * @return boolean
	 */
	function revokeAll($id, $type);
	/**
	 * Can I do some operation on resource? If I can return true, else return false
	 * 
	 * @param string $op 操作
	 * @param string $resource 资源
	 * @param mixed $id 访问者标识,建议使用int或string型,长度不应长于32
	 * @param string $type
	 * @param boolean $inherit 继承
	 * @return mixed 无权操作时返回false,反之返回extra信息
	 */
	function icando($op, $resource, $id, $type,$reload=false);
	
	/**
	 * 权限分配表
	 * 
	 * @param mixed $id 访问者标识,建议使用int或string型,长度不应长于32
	 * @param array $types 访问者类型,可自定义
	 * @return array 权限分配表
	 */
	function privileges($id, $types);	
}